﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace 中介者模式
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    /// Mediator 抽象中介者类，定义了同事对象到中介者对象的接口；Colleague抽象同事类；
    /// ConcreteMediator具体中介者类，实现抽象类的方法，它需要知道所有的具体同事类，
    /// 并从同事接收消息，向具体同事对象发出命令；具体同事类，每个具体同事对象只知道自己的行为，
    /// 而不了解其它同事类的情况，但它们却都认识中介者对象。
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            ConcreteMediator cm = new ConcreteMediator();
            //让两个具体同事对象认识同一个中介者
            ConcreteClooeague1 c1 = new ConcreteClooeague1(cm);
            ConcreteClooeague2 c2 = new ConcreteClooeague2(cm);
            //让中介者对象认识所有的同事对象
            cm.Colleague1 = c1;
            cm.Colleague2 = c2;
            //具体同事类对象的发送信息都是通过中介者来转发
            c1.Send("吃饭了没？");
            c2.Send("还没，要请客吗？");
        }
    }
}
